Skip to content

hotfix: socket/#692#694

Merged
hjbin-25 merged 2 commits into
developfrom
hotfix/socket/#692
Apr 18, 2026
Merged

hotfix: socket/#692#694
hjbin-25 merged 2 commits into
developfrom
hotfix/socket/#692

Conversation

@Finefinee

Copy link
Copy Markdown
Member

변경사항

관련 이슈

Closes #

추가 컨텍스트

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a custom SocketIoExceptionListener to handle invalid WebSocket requests by logging them as warnings and preventing unnecessary stack traces. The feedback suggests several improvements to align with Spring best practices, including registering the listener as a Spring Bean for better dependency injection, moving the class to a more cohesive package, and using constants for hardcoded strings.

config.setTransports(Transport.WEBSOCKET);
config.setAuthorizationListener(authService::authorize);

config.setExceptionListener(new SocketIoExceptionListener());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

SocketIoExceptionListener를 매번 new로 직접 생성하기보다는, Spring Bean으로 등록하고 생성자 주입을 통해 사용하는 것이 좋습니다. 이는 테스트 시 Mock 객체 주입을 용이하게 하고 Spring의 의존성 주입 원칙을 따르는 방법입니다.

Comment on lines +1 to +20
package com.process.clash.infrastructure.config.socket;

import com.corundumstudio.socketio.listener.DefaultExceptionListener;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class SocketIoExceptionListener extends DefaultExceptionListener {

@Override
public boolean exceptionCaught(ChannelHandlerContext ctx, Throwable e) throws Exception {
// Upgrade 헤더가 없는 잘못된 요청(HTTP 등)이 올 때 발생하는 로그 제어
if (e.getMessage() != null && e.getMessage().contains("not a WebSocket request")) {
log.warn("[Socket.IO] 비정상적인 연결 시도 차단: {} (IP: {})",
e.getMessage(), ctx.channel().remoteAddress());
return true; // 에러 전파를 여기서 중단하여 불필요한 스택 트레이스 방지
}
return super.exceptionCaught(ctx, e);
}
} No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

이 클래스는 Socket.IO 어댑터의 세부 구현 사항이므로 com.process.clash.adapter.realtime.socketio 패키지로 이동하여 응집도를 높이는 것이 좋습니다. 또한, 하드코딩된 문자열을 상수로 관리하고, Spring Bean으로 관리될 수 있도록 @Component 어노테이션을 추가하는 것을 권장합니다. 마지막으로 파일 끝에 개행 문자를 추가해 주세요.

package com.process.clash.infrastructure.config.socket;

import com.corundumstudio.socketio.listener.DefaultExceptionListener;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class SocketIoExceptionListener extends DefaultExceptionListener {

    private static final String NOT_A_WEBSOCKET_REQUEST = "not a WebSocket request";

    @Override
    public boolean exceptionCaught(ChannelHandlerContext ctx, Throwable e) throws Exception {
        // Upgrade 헤더가 없는 잘못된 요청(HTTP 등)이 올 때 발생하는 로그 제어
        if (e.getMessage() != null && e.getMessage().contains(NOT_A_WEBSOCKET_REQUEST)) {
            log.warn("[Socket.IO] 비정상적인 연결 시도 차단: {} (IP: {})",
                    e.getMessage(), ctx.channel().remoteAddress());
            return true; // 에러 전파를 여기서 중단하여 불필요한 스택 트레이스 방지
        }
        return super.exceptionCaught(ctx, e);
    }
}

@hjbin-25 hjbin-25 merged commit b1c835c into develop Apr 18, 2026
3 checks passed
@hjbin-25 hjbin-25 deleted the hotfix/socket/#692 branch April 18, 2026 05:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants